Computer-implemented system and method for selecting documents for review

ABSTRACT

A computer-implemented system and method for selecting documents for review is provided. A master array of messages and topics for the messages is generated. The messages in the master array are sorted by the topics and the sorted messages are processed. During processing, each message in the master array is identified as unique, duplicate, or near duplicate. The unique messages are extracted from the duplicate and near duplicate messages, and entered into a log by creating a log entry for each of the unique messages. Each log entry includes a source of and identification information for one of the unique messages. The unique messages are then provided for document review.

CROSS-REFERENCE TO RELATED APPLICATION

This patent application is a continuation of U.S. patent applicationSer. No. 14/571,282, filed Dec. 15, 2014, pending; which is acontinuation of U.S. Pat. No. 8,914,331, issued Dec. 16, 2014; which isa continuation of U.S. Pat. No. 8,626,767, issued Jan. 7, 2014; which isa continuation of U.S. Pat. No. 8,458,183, issued Jun. 4, 2013; which isa continuation of U.S. Pat. No. 8,108,397, issued Jan. 31, 2012; whichis a continuation of U.S. Pat. No. 7,836,054, issued Nov. 16, 2010;which is a continuation of U.S. Pat. No. 7,577,656, issued Aug. 18,2009; which is a continuation of U.S. Pat. No. 7,035,876, issued Apr.25, 2006; which is a continuation of U.S. Pat. No. 6,820,081, issuedNov. 16, 2004; which is a continuation-in-part of U.S. Pat. No.6,745,197, issued Jun. 1, 2004, the priority dates of which are claimedand the disclosures of which are incorporated by reference.

FIELD

The present invention relates in general to stored messagecategorization and, in particular, to a computer-implemented system andmethod for selecting documents for review.

BACKGROUND

Presently, electronic messaging constitutes a major form ofinterpersonal communications, complimentary to, and, in some respects,replacing, conventional voice-based communications. Electronic messagingincludes traditional electronic mail (e-mail) and has grown to encompassscheduling, tasking, contact and project management, and an increasingnumber of automated workgroup activities. Electronic messaging alsoincludes the exchange of electronic documents and multimedia content,often included as attachments. And, unlike voice mail, electronicmessaging can easily be communicated to an audience ranging from asingle user, a workgroup, a corporation, or even the world at large,through pre-defined message address lists.

The basic electronic messaging architecture includes a message exchangeserver communicating with a plurality of individual subscribers orclients. The message exchange server acts as an electronic messagecustodian, which maintains, receives and distributes electronic messagesfrom the clients using one or more message databases. Individualelectronic messaging information is kept in message stores, referred toas folders or archives, identified by user account within the messagedatabases. Generally, by policy, a corporation will archive the messagedatabases as historical data storing during routine backup procedures.

The information contained in archived electronic messages can provide apotentially useful chronology of historically significant events. Forinstance, message conversation threads present a running dialogue whichcan chronicle the decision making processes undertaken by individualsduring the execution of their corporate responsibilities. As well,individual message store archives can corroborate the receipt andacknowledgment of certain corporate communications both locally and indistributed locations. And the archived electronic message databasescreate useful audit trails for tracing information flow.

Consequently, fact seekers are increasingly turning to archivedelectronic message stores to locate crucial information and to gaininsight into individual motivations and behaviors. In particular,electronic message stores are now almost routinely produced during thediscovery phase of litigation to obtain evidence and materials useful tothe litigants and the court. Discovery involves document review duringwhich all relevant materials are read and analyzed. The document reviewprocess is time consuming and expensive, as each document mustultimately be manually read. Pre-analyzing documents to removeduplicative information can save significant time and expense by paringdown the review field, particularly when dealing with the large numberof individual messages stored in each of the archived electronicmessages stores for a community of users.

Typically, electronic messages maintained in archived electronic messagestores are physically stored as data objects containing text or othercontent. Many of these objects are duplicates, at least in part, ofother objects in the message store for the same user or for other users.For example, electronic messages are often duplicated through inclusionin a reply or forwarded message, or as an attachment. A chain of suchrecursively-included messages constitutes a conversation “thread.” Inaddition, broadcasting, multitasking and bulk electronic message“mailings” cause message duplication across any number of individualelectronic messaging accounts.

Although the goal of document pre-analysis is to pare down the size ofthe review field, the simplistic removal of wholly exact duplicatemessages provides only a partial solution. On average, exactlyduplicated messages constitute a small proportion of duplicatedmaterial. A much larger proportion of duplicated electronic messages arepart of conversation threads that contain embedded information generatedthrough a reply, forwarding, or attachment. The message containing thelongest conversation thread is often the most pertinent message sinceeach of the earlier messages is carried forward within the messageitself. The messages comprising a conversation thread are “near” exactduplicate messages, which can also be of interest in showing temporaland substantive relationships, as well as revealing potentiallyduplicated information.

In the prior art, electronic messaging applications provide limitedtools for processing electronic messages. Electronic messaging clients,such as the Outlook product, licensed by Microsoft Corporation, Redmond,Wash., or the cc:mail product, licensed by Lotus Corporation, Cambridge,Mass., provide rudimentary facilities for sorting and grouping storedmessages based on literal data occurring in each message, such assender, recipient, subject, send date and so forth. Attachments aregenerally treated as separate objects and are not factored into sortingand grouping operations. However, these facilities are limited toprocessing only those messages stored in a single user account and areunable to handle multiple electronic message stores maintained bydifferent message custodians. In addition, the systems only providepartial sorting and grouping capabilities and do not provide for cullingout message with duplicate attachments.

Therefore, there is a need for an approach to processing electronicmessages maintained in multiple message stores for documentpre-analysis. Preferably, such an approach would identify messagesduplicative both in literal content, as well as with respect toattachments, independent of source, and would “grade” the electronicmessages into categories that include unique, exact duplicate, and nearduplicate messages, as well as determine conversation thread length.

There is a further need for an approach to identifying unique messagesand related duplicate and near duplicate messages maintained in multiplemessage stores. Preferably, such an approach would include an ability toseparate unique messages and to later reaggregate selected uniquemessages with their related duplicate and near duplicate messages asnecessary.

There is a further need for an approach to processing electronicmessages generated by Messaging Application Programming Interface(MAPI)-compliant applications.

SUMMARY

The present invention provides a system and method for generating ashadow store storing messages selected from an aggregate collection ofmessage stores. The shadow store can be used in a document reviewprocess. The shadow store is created by extracting selected informationabout messages from each of the individual message stores into a masterarray. The master array is processed to identify message topics, whichoccur only once in the individual message stores and to then identifythe related messages as unique. The remaining non-unique messages areprocessed topic by topic in a topic array from which duplicate, nearduplicate and unique messages are identified. In addition, thread countsare tallied. A log file indicating the nature and location of eachmessage and the relationship of each message to other messages isgenerated. Substantially unique messages are copied into the shadowstore for use in other processes, such as a document review process.Optionally, selected duplicate and near duplicate messages are alsocopied into the shadow store or any other store containing the relatedunique message.

An embodiment provides a computer-implemented system and method forselecting documents for review. A master array of messages and topicsfor the messages is generated. The messages in the master array aresorted by the topics and the sorted messages are processed. Duringprocessing, each message in the master array is identified as unique,duplicate, or near duplicate. The unique messages are extracted from theduplicate and near duplicate messages and entered into a log by creatinga log entry for each of the unique messages. Each log entry includes asource of and identification information for one of the unique messages.The unique messages are then provided for document review.

Still other embodiments of the present invention will become readilyapparent to those skilled in the art from the following detaileddescription, wherein is described embodiments of the invention by way ofillustrating the best mode contemplated for carrying out the invention.As will be realized, the invention is capable of other and differentembodiments and its several details are capable of modifications invarious obvious respects, all without departing from the spirit and thescope of the present invention. Accordingly, the drawings and detaileddescription are to be regarded as illustrative in nature and not asrestrictive.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a functional block diagram showing a distributed computingenvironment, including a system for efficiently processing messagesstored in multiple message stores, in accordance with the presentinvention.

FIG. 2 is a block diagram showing the system for efficiently processingmessages of FIG. 1.

FIG. 3 is a data flow diagram showing the electronic message processingfollowed by the system of FIG. 2.

FIG. 4 is a block diagram showing the software modules of the system ofFIG. 2.

FIG. 5 shows, by way of example, an annotated electronic message.

FIG. 6 is a flow diagram showing a method for efficiently processingmessages stored in multiple message stores, in accordance with thepresent invention.

FIG. 7 is a flow diagram showing the routine for creating a shadow storefor use in the method of FIG. 6.

FIG. 8 is a flow diagram showing the routine for processing messages foruse in the method of FIG. 6.

FIG. 9 is a flow diagram showing the routine for processing the masterarray for use in the routine of FIG. 8.

FIGS. 10A-C are flow diagrams showing the routine for processing a topicarray for use in the routine of FIG. 9.

FIG. 11 is a flow diagram showing the routine for processing a log foruse in the routine of FIG. 8.

FIG. 12 is a functional block diagram showing a distributed computingenvironment, including a system for evaluating a structured messagestore for message redundancy, in accordance with a further embodiment ofthe present invention.

FIG. 13 is a block diagram showing the software modules of theproduction server of FIG. 12.

FIG. 14 is a data flow diagram showing the electronic message processingfollowed by the production server of FIG. 13.

FIG. 15 shows, by way of example, a database schema used by theproduction server of FIG. 13.

FIG. 16 is a flow diagram showing a method for evaluating a structuredmessage store for message redundancy, in accordance with a furtherembodiment of the present invention.

FIGS. 17A-B are flow diagrams showing the routine for extractingmessages for use in the method of FIG. 16.

FIGS. 18A-C are flow diagrams showing the routine for de-duping messagesfor use in the method of FIG. 16.

DETAILED DESCRIPTION

FIG. 1 is a functional block diagram showing a distributed computingenvironment 10, including a system for efficiently processing messagesstored in multiple message stores, in accordance with the presentinvention. The distributed computing environment 10 includes aninternetwork 16, including the Internet, and an intranetwork 13. Theinternetwork 16 and intranetwork 13 are interconnected via a router 17or similar interconnection device, as is known in the art. Other networktopologies, configurations, and components are feasible, as would berecognized by one skilled in the art.

Electronic messages, particularly electronic mail (email), are exchangedbetween the various systems interconnected via the distributed computingenvironment 10. Throughout this document, the terms “electronic message”and “message” are used interchangeably with the same intended meaning.In addition, message types encompass electronic mail, voice mail,images, scheduling, tasking, contact management, project management,workgroup activities, multimedia content, and other forms ofelectronically communicable objects, as would be recognized by oneskilled in the art. These systems include a server 11 providing amessage exchange service to a plurality of clients 12 a, 12 binterconnected via the intranetwork 13. The clients 12 a, 12 b can alsosubscribe to a remote message exchange service provided by a remoteserver 14 interconnected via the internetwork 16. Similarly, a remoteclient 15 can subscribe to either or both of the message exchangeservices from the server 11 and the remote server 14 via theinternetwork 16.

Each of the systems is coupled to a storage device. The server 11,clients 12 a, 12 b, and remote client 15 each maintain stored data in alocal storage device 18. The remote server 14 maintains stored data in alocal storage device (not shown) and can also maintain stored data forremote systems in a remote storage device 19, that is, a storage devicesituated remotely relative to the server 11, clients 12 a, 12 b, andremote client 15. The storage devices include conventional hard drives,removable and fixed media, CD ROM and DVD drives, and all other forms ofvolatile and non-volatile storage devices.

Each of the systems also maintains a message store, either on the localstorage device or remote storage device, in which electronic messagesare stored or archived. Each message store constitutes an identifiablerepository within which electronic messages are kept and can include anintegral or separate archive message store for off-line storage.Internally, each message store can contain one or more message folders(not shown) containing groups of related messages, such as an “Inbox”message folder for incoming messages, an “Outbox” message folder foroutgoing messages, and the like. For clarity of discussion, individualmessage folders will be treated alike, although one skilled in the artwould recognize that contextually related message folders might beseparately processed.

In a workgroup-computing environment, the server 11 collectivelymaintains the message stores as a workgroup message store (WMS) 22 foreach subscribing client 12 a, 12 b and remote client 15. In adistributed computing environment, each client 12 a, 12 b and remoteclient 15 might maintain an individual message store 21 either in lieuof or in addition to a workgroup message store 21. Similarly, the remoteserver 14 could maintain a workgroup message store 22 for remoteclients.

Over time, each of the message stores unavoidably accumulatesduplicates, at least in part, of other electronic messages stored in themessage store for the same user or for other users. These duplicate andnear duplicate electronic messages should be identified and removedduring document pre-analysis. Thus, the server 11 includes a messageprocessor 20 for efficiently processing the electronic messages storedin the various message stores 21, 22 as further described belowbeginning with reference to FIG. 2. Optionally, an individual client 12a could also include the message processor 20. The actual homing of themessage processor 20 is only limited by physical resource availabilityrequired to store and process individual message stores 21 and workgroupmessage stores 22.

The electronic messages are retrieved directly from the individualmessage stores 21, the workgroup message stores 22, or consolidated fromthese message stores into a combined message store. For documentpre-analysis, the message stores can include both active “on-line”messages and archived “off-line” messages maintained in a local storagedevice 18 or remote storage device 19.

The individual computer systems including the server 11, clients 12,remote server 14, and remote client 15, are general purpose, programmeddigital computing devices consisting of a central processing unit (CPU),random access memory (RAM), non-volatile secondary storage, such as ahard drive, CD ROM or DVD drive, network interfaces, and peripheraldevices, including user interfacing means, such as a keyboard anddisplay. Program code, including software programs, and data are loadedinto the RAM for execution and processing by the CPU and results aregenerated for display, output, transmittal, or storage.

FIG. 2 is a block diagram showing the system for efficiently processingmessages of FIG. 1. The system 30 includes the server 11, storage device18, and one or more message stores 32. The message stores 32 couldinclude individual message stores 21 and workgroup message stores 22(shown in FIG. 1). Alternatively, the system 30 could include a client12 a (not shown) instead of the server 11.

The server 11 includes the messages processor 20 and optionally operatesa messaging application 31. The messaging application 31 providesservices with respect to electronic message exchange and informationstorage to individual clients 12 a, 12 b, remote servers 14, and remoteclients 15 (shown in FIG. 1). On an application side, these servicesinclude providing electronic mail, scheduling, tasking, contact andproject management, and related automated workgroup activities support.On a system side, these services include message addressing storage andexchange, and interfacing to low-level electronic messaging subsystems.An example of a message exchange server 31 is the Exchange Serverproduct, licensed by Microsoft Corporation, Redmond, Wash. Preferably,the message exchange server 31 incorporates a Messaging ApplicationProgramming Interface (MAPI)-compliant architecture, such as describedin R. Orfali et al., “Client/Server Survival Guide,” Ch. 19, John Wiley& Sons, Inc. (1999 3d ed.), the disclosure of which is incorporated byreference. The messaging application is not a part of the presentinvention, but is shown to illustrate a suitable environment in whichthe invention may operate.

The message processor 20 processes the message stores 32 (shown inFIG. 1) to efficiently pre-analyze the electronic messages, as furtherdescribed below with reference to FIG. 3. The message stores 32 areprocessed to create one or more constructs stored into a “shadow” store33. A point-to-point keyed collection 35 stores cross-references betweenthe identifier of the original message store 32 or folder in theoriginal message store and the identifier of the newly createdcorresponding folder or subfolder in the shadow store 33. Duringprocessing, the electronic messages are “graded” into duplicate, nearduplicate and unique categories and tagged by longest conversationthread.

The results of message processing are chronicled into a log 34 toidentify unique messages 44 and to create a processing audit trail forallowing the source and ultimate disposition of any given message to bereadily traced. As well, a cross-reference keyed collection 36 allowsunique message identifiers to be submitted and the source locationinformation of those messages that are duplicates or near duplicates ofthe unique message to be retrieved. The retrieval information allows theoptional reaggregation of selected unique messages and the relatedduplicate and near duplicates messages at a later time, such as byinclusion into the shadow store 33 at the end of the document reviewprocess. Optionally, the duplicate and near duplicate messages can berejoined with their related unique messages for completeness. The log 34records not only the disposition of each message, but, in the case ofduplicate and near duplicate messages, indicates the unique message withwhich each duplicate and near duplicate message is associated, therebypermitting specific duplicate and near duplicate messages to be locatedand optionally reaggregated with selected unique messages at a latertime. In the described embodiment, the cross-reference keyed collection36 is maintained as part of the log 34, but is separately identified forpurposes of clarity. The unique messages 44 are copied into the shadowstore 33 for forwarding to the next stage of document review.

FIG. 3 is a data flow diagram 40 showing the electronic messageprocessing cycle followed by the system 30 of FIG. 2. First, the variousmessage stores 41 are opened for access. Metadata consisting of messageidentification information, including message source locationinformation, and message topics (or subjects), is extracted into a“master” array 42. The master array 42 is a logical collection of thetopics and identification information, in the form of metadata, for allof the messages in the various message stores 41. The metadata ismanipulated in the various data structures described herein, includingthe master array 42, topic array 43, and arrays for unique messages 44,near duplicate messages 45, thread lengths 46, and exact duplicatemessages 47. However, except as noted otherwise, the messages aredescribed as being directly manipulated during processing, although oneskilled in the art would recognize that metadata, messages, or anycombination thereof could be used.

The messages in the master array 42 are sorted by topic to identifyunique messages and conversation threads, as reflected by ranges ofmultiple occurrences of the same topic. The identification information(metadata) for those messages having identical topics is extracted intoa topic array 43 as each new topic is encountered within the masterarray 42.

The topic array 43 functions as a working array within which topicallyidentical messages are processed. The identification informationextracted from the master array 42 is used to copy into the topic arrayfurther information from messages sharing a common topic, includingtheir plaintext. At any point in processing, the topic array 43 containsonly those messages sharing a common topic. These topically identicalmessages are sorted by plaintext body and analyzed. Exact duplicatemessages 47, containing substantially duplicated content, are removedfrom the topic array 43. The remaining non-exact duplicate messages inthe topic array 43 are searched for thread markers indicatingrecursively-included content and conversation thread lengths 46 aretallied. The messages in the topic array 43 are compared and nearduplicate messages 45 are identified. The unique messages 45 are markedfor transfer into the shadow store 48.

FIG. 4 is a block diagram showing the software modules 60 of the system30 of FIG. 2. Each module is a computer program, procedure or modulewritten as source code in a conventional programming language, such asthe Visual Basic programming language, and is presented for execution bythe CPU as object or byte code, as is known in the art. The variousimplementations of the source code and object and byte codes can be heldon a computer-readable storage medium or embodied on a transmissionmedium in a carrier wave. The message processor 20 operates inaccordance with a sequence of process steps, as further described belowbeginning with reference to FIG. 6.

The message processor 20 includes four primary modules: exact duplicatemessage selector 61, thread length selector 62, near duplicate messageselector 63, and unique message selector 64. Prior to processing, themessage stores 41 are logically consolidated into the master array 42.At each stage of message processing, a log entry is created (or anexisting entry modified) in a log 34 to track messages and recordmessage identification information. The exact duplicate message selector61 identifies and removes those exact duplicate messages 47 containingsubstantially duplicative content from the topic array 43. The threadlength selector 62 tallies the conversation thread lengths 46 andmaintains an ordering of thread lengths, preferably from shortest tolongest conversation thread length. The near duplicate message selector63 designates as near duplicate messages 45 those whose content isrecursively-included in other messages, such as those messages generatedthrough a reply or forwarding sequence, or as an attachment. The uniquemessage selector 64 designates as unique messages 45 those messages thathave been extracted out of the master array 42 as not being topicallyidentical and those messages remaining after the exact duplicatemessages 48 and near duplicate messages 46 have been identified. Theunique messages 45 are forwarded to the shadow store 48 for use insubsequent document review. The unique, near duplicate, and exactduplicate messages, as well as thread counts, are regularly recordedinto the log 34, as the nature of each message is determined. As well,the location information permitting subsequent retrieval of each nearduplicate message 45 and exact duplicate message 47 is regularlyinserted into the cross-reference keyed collection 36 relating themessage to a unique message as the relationship is determined.

FIG. 5 shows, by way of example, an annotated electronic message 70.Often the message having the longest conversation thread length 47 isthe most useful message to review. Each preceding message is recursivelyincluded within the message having the longest conversation threadlength and therefore these near duplicate messages can be skipped in anefficient review process.

The example message 70 includes two recursively-included messages: anoriginal e-mail message 71 and a reply e-mail message 72. The originale-mail message 71 was sent from a first user, user1@ aol.com, to asecond user, user2@ aol.com. In reply to the original e-mail message 71,the second user, user2@ aol.com, generated the reply e-mail message 72,sent back to the first user, user1@ aol.com. Finally, the first user,user1@ aol.com, forwarded the reply e-mail message 72, which alsoincluded the original e-mail message 71, as a forwarded e-mail message73, to a third user, user3@ aol.com.

Each of the e-mail messages 71, 72, 73 respectively includes a messagebody (recursively-included) 74, 78, 82 and a message header 75, 77, 81.The original e-mail message 71 and the reply e-mail message 72 arerecursively-included messages. The original e-mail message 71 isrecursively included in both the reply e-mail message 72 and forwardede-mail message 73 while the reply e-mail message 72 is recursivelyincluded only in the forwarded e-mail message 73.

Each successive reply, forwarding or similar operation increases theconversation thread length 47 of the message. Thread lengths 47 areindicated within the messages themselves by some form of delimiter. Inthe example shown, the inclusion of the original e-mail message 71 inthe reply e-mail message 72 is delimited by both a separator 80 and a“RE:” indicator in the subject line 79. Likewise, the inclusion of thereply e-mail message 72 is delimited by a separator 84 and a “FW:”indicator in the subject line 83. The message separators 80, 84 andsubject line indicators 79, 83 constitute thread “markers” that can besearched, identified and analyzed by the message processor 20 indetermining thread lengths 47 and near duplicate messages 46.

FIG. 6 is a flow diagram showing a method 100 for efficiently processingmessages stored in multiple message stores, in accordance with thepresent invention. The method 100 operates in two phases: initialization(blocks 101-103) and processing (blocks 104-107).

During initialization, the message stores 41 (shown in FIG. 3) areopened for access by the message processor 20 (block 101) and the shadowstore 48 is created (block 102), as further described below withreference to FIG. 7. In the described embodiment, the message processor20 has a finite program capacity presenting an upper bound on themaximum number of electronic messages to be processed during a singlerun. Consequently, multiple processing passes may be required to processall of the messages stored in the aggregate of the message stores 41.

In the described embodiment, assuming that the aggregate number ofmessages exceeds the program bounds, the processing is broken down intoa series of passes n, during each of which a portion of the aggregatemessage stores 41 is processed. The number of passes n required toprocess the source message stores 41 is determined (block 103) by anappropriate equation, such as the following equation:

$n = {{ceil}\lceil \frac{TotNumMessages}{ProgMax} \rceil}$where n equals the total number of iterative passes, TotNumMessages isthe total number of messages in the aggregate of the message stores 41,and ProgMax is the maximum program message processing capacity.

In the described embodiment, the aggregate selection of messages fromthe message stores 41 is processed by overlapping partition i,preferably labeled by dividing the alphabet into partitionscorresponding to the number of passes n. For example, if two passes nare required, the partitions would be “less than M” and “greater thanL.” Similarly, if 52 passes n were required, the partitions would be“less than Am” and “greater than Al and less than Ba.”

During operation, the partitions, if required, are processed in aniterative processing loop (blocks 104-106). During each pass n (block104) the messages are processed (block 105), as further described belowbeginning with reference to FIG. 8. Upon the completion of theprocessing (block 106), the message stores 41 are closed (block 107). Asan optional operation, the exact duplicate messages 47 and the nearduplicates messages 45 are reinserted into the shadow store 48 (block108). The method terminates upon the completion of processing.

FIG. 7 is a flow diagram showing the routine 120 for creating a shadowstore for use in the method 100 of FIG. 6. The purpose of this routineis to create a holding area, called the shadow store 48 (shown in FIG.3) in which unique messages 45 are stored for the next stage in documentreview. A message counter is maintained to count the messages in theaggregate of all message stores 41. The message counter is initially setto zero (block 121). Each of the source message stores 41 is thenprocessed in a pair of nested iterative processing loops (blocks 122-128and 124-129), as follows.

During the outer processing loop (blocks 122-129), a foldercorresponding to each source message store 41 is created in the shadowstore 48 (block 123). Next, each of the folders in the current selectedsource message store 41 is iteratively processed in the inner processingloop (blocks 124-128) as follows. First, the message counter isincremented by the number of messages in the folder being examined inthe source message store 41 (block 125) and a corresponding folder inthe shadow store 48 is created (block 126). An entry is made in apoint-to-point keyed collection 35 (block 127) that constitutes across-reference between a pointer to the original message store 41 orfolder in the original message store and a pointer to the newly createdcorresponding folder or subfolder in the shadow store 48. When uniquemessages are later copied into the shadow store 48, this keyed fileallows the copying to proceed “point-to-point,” rather than requiringthat the folders in the shadow store 48 be iteratively searched to findthe correct one. Processing of each folder in the current source messagestore 41 continues (block 128) for each remaining folder in the sourcemessage store. Similarly, processing of each of the source messagestores themselves 41 continues (block 129) for each remaining sourcemessage store 41, after which the routine returns (block 130), providinga count of all the messages in all the source message stores so that thenumber of passes required can be determined.

FIG. 8 is a flow diagram showing the routine 140 for processing messagesfor use in the method 100 of FIG. 6. The purpose of this routine is topreprocess the messages stored in the message stores 41. Note at eachstage of message processing, a log entry is implicitly entered into thelog 34 (shown in FIG. 3) to record the categorization and disposition ofeach message.

The messages are processed in a processing loop (blocks 141-144). Duringeach iteration (block 141), each message in the selected folder ischecked for membership in the current partition i of the source messagestores 41 (block 142). If the message is in the current partition i(block 142), the message is logically transferred into the master array42 (block 143) by extracting the topic and location information,including message identification information and pointers to the sourcemessage store 41, the source message folder, and to the individualmessage (metadata). Using metadata, rather than copying entire messages,conserves storage and memory space and facilitates faster processing.Processing continues for each message in the selected folder (block144).

When all folders have been processed and the metadata for those messagesfound to be within the partition has been transferred into the masterarray, message processing begins. The messages are sorted by topic(block 145) and the master array 42 is processed (block 146), as furtherdescribed below with reference to FIG. 9. Last, the log 49 is processed(block 147), after which the routine returns.

FIG. 9 is a flow diagram showing the routine 160 for processing themaster array 42 for use in the routine 140 of FIG. 8. The purpose ofthis routine is to identify unique messages 44 and to process topicallyidentical messages using the topic array 43. The routine processes themessages to identify unique and topically similar messages using aniterative processing loop (blocks 161-171). During each iteration (block161), the topic (or subject line) of the each message in the masterarray 42 is compared to that of the next message in the master array 42(block 162). If the topics match (block 163), the messages may be fromthe same conversation thread. If the message is the first message withthe current topic to match the following message (block 164), this firstmessage in the potential thread is marked as the beginning of a topicrange (block 165) and processing continues with the next message (block171). Otherwise, if the message is not the first message in theconversation thread (block 164), the message is skipped and processingcontinues with the next message (block 171).

If the topics do not match (block 163), the preceding topic range isending and a new topic range is starting. If the current message was notthe first message with that topic (block 166), the range of messageswith the same topic (which began with the message marked at block 165)is processed (block 168). If the current message is the first messagewith the matching topic (block 166), the message is extracted as aunique message 45 (block 167) and processing continues with the nextmessage (block 171). If the topic range has ended (block 166), eachtopically identical message, plus message transmission time, islogically extracted into the topic array 43 (block 168). In thedescribed embodiment, the messages are not physically copied into thetopic array 43; rather, each message is logically “transferred” usingmetadata into the topic array 43 to provide message source locationinformation, which is used to add a copy of the plaintext body of themessage into the topic array. The topic array 43 is sorted by plaintextbody (block 169) and processed (block 170), as further described belowwith reference to FIGS. 10A-C. Processing continues with the nextmessage (block 171). The routine returns upon the processing of the lastmessage in the master array 42.

FIGS. 10A-C are flow diagrams showing the routine 180 for processing atopic array for use in the routine 160 of FIG. 9. The purpose of thisroutine is to complete the processing of the messages, includingidentifying duplicate, near duplicate and unique messages, and countingthread lengths. The routine cycles through the topic array 43 (shown inFIG. 3) in three iterative processing loops (blocks 181-187, 189-194 and196-203) as follows.

During the first processing loop (blocks 181-187) each message in thetopic array 43 is examined. The plaintext body of the current message iscompared to the plaintext body of the next message (block 182). If theplaintext bodies match (block 183), an exact duplicate message possiblyexists, pending verification. The candidate exact duplicate is verifiedby comparing the header information 75, 77, 81 (shown in FIG. 5), thesender of the message (block 184), and the transmission times of eachmessage. If the match is verified (block 185), the first message ismarked as an exact duplicate of the second message and theidentification information for the first and second messages and theirrelationship is saved into the log 49 (block 186) and cross-referencekeyed collection 36 (shown in FIG. 2). The processing of each subsequentmessage in the topic array 43 (block 187) continues for the remainingmessages.

Next, the messages marked as exact duplicate messages are removed fromthe topic array 43 (block 188) and the remaining non-exact duplicatemessages in the topic array 43 are processed in the second processingloop (blocks 189-194) as follows. First, each message is searched forthread markers, including separators 80, 84 and subject line indicators79-83 (shown in FIG. 5) (block 190). If thread markers are found (block191), the number of thread marker occurrences m is counted and recorded(block 192). Otherwise, the message is recorded as having zero threadmarkers (block 193). In the described embodiment, the data entrieshaving zero thread markers are included in the sorting operations. Thesemessages have message content, but do not include other messages.Recording zero thread markers allows these “first-in-time” messages tobe compared against messages which do have included messages. Processingcontinues for each of the remaining messages (block 194), until allremaining messages in the topic array 43 have been processed.

The topic array is next sorted in order of increasing thread markers m(block 195) and the messages remaining in the topic array 43 areiteratively processed in the third processing loop (block 196-203).During each processing loop (block 196), the first and subsequentmessages are selected (blocks 197, 198) and the plaintext body of themessages compared (block 199). In the described embodiment, a textcomparison function is utilized to allow large text blocks to beefficiently compared. If the plaintext body of the first selectedmessage is included in the plaintext body of the second selected message(block 200), the first message is marked as a near duplicate of thesecond message and identification information on the first and secondmessages and their relationship is saved into the log 49 andcross-reference keyed collection 36 (shown in FIG. 2) (block 201). Ifthe plaintext body of the first selected message is not included in theplaintext body of the second selected message and additional messagesoccur subsequent to the second message in the topic array 43 (block202), the next message is selected and compared as before (blocks198-202). Each subsequent message in the topic array is processed (block203) until all remaining messages have been processed, after which theroutine returns.

FIG. 11 is a flow diagram showing the routine 220 for processing a logfor use in the routine 140 of FIG. 8. The purpose of this routine is tofinalize the log 34 for use in the review process. Processing occurs inan iterative processing loop (block 221-226) as follows. Each message inthe master array 42 is processed during each loop (block 221). If theselected message is a unique message 45 (block 222), a copy of themessage is retrieved from the source folder in the source message store41 (shown in FIG. 3) and placed into the corresponding folder in thecorresponding message store in the shadow store 48 (block 223) (usingthe cross-reference keyed collection 36 created at the time of creatingthe shadow store 34), plus an entry with message source locationinformation and identification information is created in the log 34(block 224). Otherwise, the message is skipped as a near duplicatemessage 45 or exact duplicate message 47 (block 225) that is notforwarded into the next phase of the document review process. Processingof each subsequent message in the master array 42 continues (block 226)for all remaining messages, after which the routine returns.

FIG. 12 is a functional block diagram showing a distributed computingenvironment 230, including a system for evaluating a structured messagestore for message redundancy, in accordance with a further embodiment ofthe present invention. In addition to the message processor 20 executingon the server 11, a production server 231 includes a workbenchapplication 232 for providing a framework for acquiring, logging,culling, and preparing documents for automated review and analysis. Theworkbench application 232 includes a production message processor (ProdMP) 233 for efficiently processing the electronic messages stored in theindividual message stores 21 and the workgroup message stores 22, asfurther described below beginning with reference to FIG. 13.

The production server 231 maintains an archived message store (AMS) 236on a storage device 234 and a database 235. The production server 231preferably functions as an off-line message processing facility, whichreceives individual message stores 21 and workgroup message stores 22for document review processing as the archived message stores 236. Thedatabase 235 abstracts the contents of individual messages extractedfrom the archived message stores 236 into structured message records asa form of standardized representation for efficient processing andidentification of duplicative content, including attachments, as furtherdescribed below with reference to FIG. 15.

FIG. 13 is a block diagram showing the software modules of theproduction server 231 of FIG. 12. The workbench application 232 executeson the production server 231, preferably as a stand-alone applicationfor processing messages consolidated from the individual message stores21 and the workgroup message stores 22 into the consolidated messagestore 236. The workbench application 232 includes the production messageprocessor 233 for identifying unique messages and culling out duplicateand near duplicate messages.

The production message server 233 includes five primary modules: messageextractor 241, message de-duper 242, parser 243, digester 244, andcomparer 245. Prior to processing, the production message processor 233logically assembles the archived message stores 236 by first importingeach individual message store 21 and workgroup message store 22 from thephysical storage media upon which the message store 21, 22 ismaintained. The archived message stores 236 provide a normalizedelectronic storage structure independent of physical storage media.Consequently, importing each individual message 21 and workgroup messagestore 22 can include converting the message store from a compressed orarchival storage format into a standardized “working” message storeformat for message access and retrieval. In the described embodiment,the formats used for individual messages and message stores as used inthe Outlook family of messaging applications, licensed by MicrosoftCorporation, Redmond, Wash., and cc:mail family of messagingapplications, licensed by Lotus Corporation, Cambridge, Mass., aresupported, and other messaging application formats could likewise besupported, as would be recognized by one skilled in the art. At eachstage of message processing, a log entry can be created (or an existinglog entry modified) in a log 247 for tracking messages and recordingmessage identification information.

The message extractor 241 retrieves each individual message from thearchived message stores 236. The parser 243 parses individual fieldsfrom each extracted message and identifies message routing,identification information and literal content within each field. Theparsed metadata and message body are then stored in message records 248maintained in the database 235, as further described below withreference to FIG. 15. Each message record 248 includes a hash code 249associated with the message, which is calculated by the digester 244,exclusive of any attachments. Each attachment also includes a separatelycalculated attachment hash code 249. Each hash code 249 is a sequence ofalphanumeric characters representing the content, also referred to as adigest.

The hash codes 249 are calculated using a one-way function to generate asubstantially unique alphanumeric value, including a purely numeric oralphabetic value, associated with the message or attachment. The hashcodes 249 are calculated over at least part of each message header, plusthe complete message body. If the message includes attachments, separateattachment hash codes 249 are calculated over at least part of eachattachment. For each message, the hash code 249 can be calculated overat least part of the header, plus the complete message body. Inaddition, the demarcation between the data constituting a header and thedata constituting a message body can vary and other logical grouping ofdata into headers, message bodies, or other structures or groupings arepossible, as would be recognized by one skilled in the art.

In the described embodiment, the MD5 hashing algorithm, which stands for“Message Digest No. 5,” is utilized and converts an arbitrary sequenceof bytes having any length into a finite 128-bit digest, such asdescribed in D. Gourley and B. Tatty, “HTTP, the Definitive Guide,” pp.288-299, O'Reilly and Assocs., Sebastopol, Calif. (2002), the disclosureof which is incorporated by reference. Other forms of cryptographiccheck summing, one-way hash functions, and fingerprinting functions arepossible, including the Secure Hash Algorithm (SHA), and other relatedapproaches, as would be recognized by one skilled in the art.

Once the message records 248 in the database 235 have been populatedwith the extracted messages, the message de-duper 242 identifies uniquemessages, exact duplicate messages, and near duplicate messages, asfurther described below with reference to FIG. 18. The messages aregrouped by message hash codes 249 and each group of matching hash codes249 is analyzed by comparing the content and the hash codes 249 for eachmessage and any associated attachments to identify unique messages,exact duplicate messages, and near duplicate messages. A hash codeappearing in a group having only one message corresponds to a uniquemessage. A hash code appearing in a group having two or more messagescorresponds to a set of exact duplicate messages with either noattachments or with identical attachments. Optionally, the exactduplicate messages and near duplicate messages can be maintained in ashadow store 246 for data integrity and auditing purposes.

FIG. 14 is a data flow diagram showing the electronic message processing260 followed by the production server 231 of FIG. 13. First, the variousarchived message stores 236 are first opened for access. For eachmessage in each of the archived message stores 236, metadata consistingof message routing, identification information and literal content areextracted. The metadata and message body, exclusive of any attachments,are calculated into a message hash code 261. In tandem, any attachments262 are calculated into attachment hash codes 263. The metadata, messagebody, hash code 261, and hash codes 263 for any attachments are storedinto the database 235 as message records 264. Each of the messagerecords 264 is uniquely identified, as further described below withreference to FIG. 15. Finally, the message records 264 are retrievedfrom the database 235 and processed to identify unique messages 265,exact duplicate messages 266, and near duplicate messages 267, asfurther described below with reference to FIG. 18.

FIG. 15 shows, by way of example, a database schema 270 used by theproduction server 231 of FIG. 13. The message records 248 in thedatabase 235 are preferably structured in a hierarchical organizationconsisting of tables for individual message files 271, mail properties(MailProperties) 272, compound documents (CompoundDocs) 273, andcompound members (CompoundMembers) 274, although other forms ofhierarchical and non-hierarchical organization are feasible, as would berecognized by one skilled in the art.

The files table 271 stores one record for each individual messageextracted from the archived message stores 236. Each record in the filestable 271 shares a one-to-one relationship with an extracted message.Each record is assigned a unique, monotonically increasingidentification number (id) 275. The files table 271 includes fields forstoring the extracted message name 276, type 277, type confirmation 278,path 279, length 280, modified date 281, created date 282, description283, owner key 284, and Bates tag 286. In addition, the hash code 261for the extracted message, exclusive of any attachments, is stored in ahash code field 285.

The mail properties table 272 contains the message routing,identification information and literal content associated with eachextracted message. Each record in the mail properties table 272 shares aone-to-one relationship with an associated record in the files table271. Each record in the mail properties table 272 is identified by afile identifier (FileId) 287. The mail properties table 272 includesfields for storing message unique ID 288, sent from 289, sent to 290,sent cc 291, sent bcc 292, sent date 293, subject 294, thread subject295, and message 296. The hash code 261 is calculated by the digester244 using select fields 302 of each record, which include all of thefields except the file identifier 287 and message unique ID 288 fields,although one skilled in the art would recognize that other combinationsand selections of fields could also be used to calculate the hash code261.

The compound documents table 273 and compound members table 274 share aone-to-many relationship with each other. The records in the compounddocuments table 273 and compound members table 274 store any attachmentsassociated with a given extracted message stored in a record in the filetable 271. Each record in the compound documents table 273 contains aroot file identifier (routeFileld) 297. The compound documents table 273includes fields for storing marked category 299 and the hash code 263 isstored in a hash code field 298. Each record in the compound documentstable 273 shares a one-to-many relationship with each attachmentassociated with an extracted message. Similarly, each record in thecompound members 274 is uniquely identified by a file ID (FieldId) 300field and a compound document key field 301.

FIG. 16 is a flow diagram showing a method 310 for evaluating astructured message store for message redundancy, in accordance with afurther embodiment of the present invention. The method 310 operates inthree phases. During the first phase, the individual message stores 21and workgroup message stores 22 are obtained and consolidated into thearchived message stores 236 (block 311). The individual message stores21 and workgroup message stores 22 can be in physically disparatestorage formats, such as on archival tapes or other forms of on-line oroff-line archival media, and could constitute compressed data.Consequently, each of the individual message stores 21 and workgroupmessage stores 22 are converted into a standardized on-line format formessage identity processing.

During the second phase, individual messages are extracted from thearchived message stores 236 (block 213), as further described below withreference to FIG. 17. Briefly, individual messages are extracted fromthe archived message stores 236, digested into hash codes 261 and 263,and stored as message records 248 in the database 235.

During the third phase, the extracted messages, as stored in messagerecords 248 in the database 235, are “de-dupped,” that is, processed toidentify unique messages 265, exact duplicate messages 266, and nearduplicate messages 267 (block 313). Finally, the routine terminates.

FIGS. 17A-B are flow diagrams showing the routine 320 for extractingmessages for use in the method 310 of FIG. 16. The purpose of thisroutine is to iteratively process each of the extracted message stores236 and individual messages to populate the message records 239 storedin the database 235.

The messages in each of the archived message stores 236 are iterativelyprocessed in a pair of nested processing loops (blocks 321-333 andblocks 322-332, respectively). Each of the archived message stores 236is processed during an iteration of the outer processing loop (block321). Each message stored in an archived message store 236 is processedduring an iteration of the inner processing loop (block 322). Eachmessage is extracted from an archived message store 236 (block 322) andeach extracted message is digested into a hash code 261 over at leastpart of the header, plus the complete message body, exclusive of anyattachments (block 324). Each hash code is a sequence of alphanumericcharacters representing the content, also referred to as a digest. Thehash codes are calculated using a one-way function to generate asubstantially unique alphanumeric value, including a purely numeric oralphabetic value, associated with message or attachment. In thedescribed embodiment, the MD5 hashing algorithm is used to form afixed-length 128-bit digest of each extracted message and routinginformation. Next, the metadata for each extracted message is parsed andstored into records in the files table 271 and mail properties table 272along with the hash code 261 and indexed by a unique identifier 275(block 325).

If the extracted message contains one or more attachments (block 326),each attachment is iteratively processed (blocks 327-329) as follows. Atleast part of each attachment is digested by the digester 244 into ahash code 263 (block 328). Each remaining attachment is iterativelyprocessed (block 329). The message hash code 261 and each attachmenthash code 263 are concatenated into a compound hash code and are storedas a compound document record in the compound documents table 273 andthe compound members table 274 (block 330). Note the message hash code261 and each attachment hash code 263 could also be logicallyconcatenated and stored separately, as would be recognized by oneskilled in the art. Each message in the archived message store 236 isiteratively processed (block 331) and each archived message store 236 isiteratively processed (block 332), after which the routine returns.

FIGS. 18A-C are flow diagrams showing the routine 340 for de-dupingmessages for use in the method 310 of FIG. 16. The purpose of thisroutine is to identify unique messages 265, exact duplicate messages266, and near duplicate messages 267 (“de-dup”) through a process knownas “culling.”

The messages stored in records in the database 235 are iterativelyprocessed in a processing loop (blocks 341-346). Each message isprocessed during an iteration of the processing loop (block 341). First,the file record 271 corresponding to each message is retrieved from thedatabase 235 (block 342). If the message is not a compound message, thatis, the message does not contain attachments (block 343), the messagehash code 261 is obtained (block 344) and processing continues with thenext message (block 346). Otherwise, if the message is a compoundmessage (block 343), the compound hash code is obtained (block 345) andprocessing continues with the next message (block 346).

Next, the messages are grouped by matching hash codes (block 347) andeach group of matching hash codes is iteratively processed in aprocessing loop (blocks 348-351). Any groups with more than one messageare processed to identify exact duplicates based on matching hash codes.A randomly selected message in the group is marked as a unique message(block 349) and the remaining messages in the group are culled, that is,marked as exact duplicates messages (block 350). Other methodologies forselecting the unique message can be used, as would be recognized by oneskilled in the art. Processing continues with the next group (block351).

Next, all non-exact duplicate messages are now iteratively processed fornear-duplicates. The messages are grouped by conversation thread (block352). In the described embodiment, the messages are sorted in descendingorder of message body length (block 353), although the messages couldalternatively be sorted in ascending order, as would be recognized byone skilled in the art. The threads, messages, and “shorter” messagesare then iteratively processed in a series of nested processing loops(blocks 354-365, 355-364, and 356-363, respectively). Each thread isprocessed during an iteration of the outer processing loop (block 354).Each message within the thread is processed during an iteration of aninner processing loop (block 355) and each message within the threadhaving an equal or shorter length, that is, each shorter message, isprocessed during an iteration of an innermost processing loop (block356). The message bodies of the first message and the shorter messageare compared (block 357). If the message bodies are not contained withineach other (block 358), the shorter message is left marked as a uniquemessage and the processing continues with the next shorter message(block 363).

Otherwise, if the message body of the shorter message is containedwithin the message body of the first message (block 358), the attachmenthash codes 263 are compared (block 359) to identify unique messages 265and near duplicate messages 267, as follows. First, if the message doesnot include any attachments, the shorter message is culled, that is,marked as a near duplicate of the first message (block 362). If themessage includes attachments (block 359), the individual attachment hashcodes 263 are compared to identify a matching or subset relationship(block 360). If the attachment hash codes 263 indicate a matching orsubset relationship between the first message and the shorter message(block 361), the shorter message is culled, that is, marked as a nearduplicate message 267 of the first message (block 362). Otherwise, theshorter message is left marked as a unique message 265. Processingcontinues with the next shorter message in the thread (block 363). Afterall shorter messages have been processed (block 363), processingcontinues with the next message (block 364) and next thread (block 365),respectively. The routine then returns.

While the invention has been particularly shown and described asreferenced to the embodiments thereof, those skilled in the art willunderstand that the foregoing and other changes in form and detail maybe made therein without departing from the spirit and scope of theinvention.

What is claimed is:
 1. A computer-implemented system for selectingdocuments for review, comprising: a master array comprising messages andtopics of the messages; and a processor to execute modules, comprising:a sort module to sort the messages in the master array by the topics; amessage processing module to process the sorted messages by identifyingeach message in the master array as unique, duplicate, or nearduplicate, by extracting the unique messages from the duplicate and nearduplicate messages, and by entering the unique messages into a log bycreating a log entry for each of the unique messages, wherein each logentry comprises a source of and identification information for one ofthe unique messages; a message counter to determine a maximum number ofthe messages to be processed during a single pass; a pass determinationmodule to determine a number of the passes required for processing themessages based on the maximum number of messages via the followingequation:$n = {{ceil}\lceil \frac{TotNumMessages}{ProgMax} \rceil}$ where n equals a total number of the processing passes, TotNumMessagesis the total number of messages, and ProgMax is the maximum number ofmessages to be processed; and a delivery module to provide the uniquemessages for document review.
 2. A system according to claim 1, whereinthe delivery module provides the duplicate and near duplicate messagesfor one or more of the unique messages during the document review.
 3. Asystem according to claim 1, further comprising: a reference module tocross reference in the log each unique message with the duplicate andnear duplicate messages for that unique message.
 4. A system accordingto claim 1, further comprising: a holding area for the unique messagesextracted from the duplicate and near duplicate messages.
 5. A systemaccording to claim 1, wherein the messages are stored in one or moreoriginal message stores.
 6. A system according to claim 5, furthercomprising: a point-to-point keyed collection storing cross-referencesbetween an identifier of the original message store for each message andan identifier of a newly created folder into which that message isplaced after processing.
 7. A system according to claim 1, furthercomprising: an identification module to identify at least one of theduplicate and near duplicate messages for a common unique message ashaving a longest thread.
 8. A system according to claim 7, furthercomprising: a thread identification module to identify the duplicate ornear duplicate message with the longest thread by identifying a numberof thread markers for each of the duplicate and near duplicate messagesfor the common unique message and sorting the duplicate and nearduplicate messages in order of increasing number of the thread markers.9. A computer-implemented method for selecting documents for review,comprising: generating a master array comprising messages and topics ofthe messages; sorting the messages in the master array by the topics;processing the sorted messages in one or more passes, comprising:identifying each message in the master array as unique, duplicate, ornear duplicate; and extracting the unique messages from the duplicateand near duplicate messages and entering the unique messages into a logby creating a log entry for each of the unique messages, wherein eachlog entry comprises a source of and identification information for oneof the unique messages; determining a maximum number of the messages tobe processed during a pass; determining a number of the passes requiredfor processing the messages based on the maximum number of messages viathe following equation:$n = {{ceil}\lceil \frac{TotNumMessages}{ProgMax} \rceil}$where n equals a total number of the processing passes, TotNumMessagesis the total number of the messages, and ProgMax is the maximum numberof the messages to be processed; and providing the unique messages fordocument review.
 10. A method according to claim 9, further comprising:providing the duplicate and near duplicate messages for one or more ofthe unique messages during the document review.
 11. A method accordingto claim 9, further comprising: cross referencing in the log each uniquemessage with the duplicate and near duplicate messages for that uniquemessage.
 12. A method according to claim 9, further comprising: creatinga holding area for the unique messages extracted from the duplicate andnear duplicate messages.
 13. A method according to claim 9, wherein themessages are stored in one or more original message stores.
 14. A methodaccording to claim 13, further comprising: generating a point-to-pointkeyed collection storing cross-references between an identifier of theoriginal message store for each message and an identifier of a newlycreated folder into which that message is placed after processing.
 15. Amethod according to claim 9, further comprising: identifying at leastone of the duplicate and near duplicate messages for a common uniquemessage as having a longest thread.
 16. A method according to claim 15,further comprising: identifying the duplicate or near duplicate messagewith the longest thread, comprising: identifying a number of threadmarkers for each of the duplicate and near duplicate messages for thecommon unique message; and sorting the duplicate and near duplicatemessages in order of increasing number of the thread markers.